01บทนำ · About Workflow Lifecycle
โครงสร้างและวัตถุประสงค์ของหน้าจอ Workflow Lifecycle
หน้าจอ Workflow Lifecycle ทำหน้าที่ออกแบบและจัดการ Workflowที่ใช้ผูกกับ Task ในระบบ QC · แต่ละ Workflow กำหนด:
- ลำดับขั้นตอน (Steps) ที่ Task จะเดินผ่าน · เช่น Created → Assigned → In Progress → Review → Done
- ผู้รับผิดชอบต่อขั้นตอน (Role Owner) · เช่น QCM · QC Inspector · PM
- SLA (ชั่วโมง) · เวลาที่ควรใช้ต่อขั้นตอน
- Transitions · เส้นทางเปลี่ยน State พร้อม Trigger (auto/pass/fail/block/unblock)
- รอบแก้ไข (Rework Loop) · เมื่อไม่ผ่านจะส่งกลับให้แก้
/inspection/workflow02ภาพรวม 3 หน้าจอหลัก
Workflow Lifecycle ประกอบด้วย 3 view หลัก · List → Create → Builder
📋 Workflow List
แสดง Workflow ทั้งหมดในระบบเป็นตาราง · Status pill · จำนวน Steps/Transitions · Task ที่ใช้อยู่ · Actions (Edit/Duplicate/Delete)
➕ Create Workflow
Modal · Basic info (name TH/EN · description · version) + Base template selector (Blank หรือ QC Standard) · เปิด Builder ให้แก้ต่อ
🛠️ Workflow Builder
Full-screen editor · แก้ Steps (add/reorder/delete) · แก้ Transitions · ดู Diagram · Save/Publish/Delete
🔗 การไหลระหว่างหน้าจอ
03Workflow List · หน้ารายการ
แสดง Workflow ทั้งหมดในระบบ · จุดเริ่มต้นเมื่อเข้าหน้า
🖼️ Layout ของหน้า
- Breadcrumb: Quality Control / Workflow Lifecycle
- Page title: "Workflow Lifecycle" + subtitle "ออกแบบ Workflow สำหรับผูกกับ Task QC"
- Action bar (ขวาบน): ปุ่ม "สร้าง Workflow ใหม่" (primary), "ใช้ Template มาตรฐาน", "นำเข้า Excel"
- Table: รายการ Workflow ทั้งหมด · เรียงตาม updatedAt DESC
📋 คอลัมน์ในตาราง
| Column | Type | รายละเอียด |
|---|---|---|
| ชื่อ Workflow | Text | Bilingual (TH/EN) · แสดงตามภาษา + คำอธิบายสั้น 1 บรรทัด |
| จำนวนขั้นตอน (Steps) | Number | นับ steps.length (เช่น 7) |
| เส้นทาง (Transitions) | Number | นับ transitions.length (เช่น 8) |
| Task ที่ใช้ (tasksUsing) | Number | จำนวน Task ที่ผูกอยู่กับ Workflow นี้ · ห้ามลบถ้า > 0 |
| สถานะ (Status) | Pill | Draft · Published · Archived |
| วันที่ปรับปรุง (updatedAt) | Date | วันที่แก้ล่าสุด + ผู้แก้ (updatedBy) |
| Actions | Buttons | Edit (pencil) · Duplicate (copy) · Delete (trash · disabled ถ้ามี Task ผูก) |
📝 ตัวอย่าง Data ใน seed
| ชื่อ | Steps | Trans | Tasks | Status | Updated |
|---|---|---|---|---|---|
| Workflow มาตรฐาน QC ก่อสร้าง | 7 | 8 | 12 | Published | 2026-04-10 · System |
| ตรวจสอบอย่างง่าย (3 ขั้นตอน) | 3 | 2 | 5 | Published | 2026-03-22 · Son Prasertsri |
| ตรวจคู่ + PM รับรอง | 5 | 5 | 0 | Draft | 2026-04-15 · Apinya Wongsuk |
⚡ Actions ในหน้า List
- สร้าง Workflow ใหม่: เปิด Create Modal (ดูหัวข้อ 04)
- ใช้ Template มาตรฐาน: เปิด Template Picker (ดูหัวข้อ 10) · เลือก 1 ใน 3 templates → กด "ใช้ Template นี้"
- นำเข้า Excel: เปิด file picker (.xlsx) · Parse Meta + Steps + Transitions → เปิด Import Preview (ดูหัวข้อ 11)
- คลิกแถว: เข้า Builder เพื่อแก้ Workflow · route
/inspection/workflow/:id/edit - Duplicate: สร้างสำเนา (นามใหม่ "...(สำเนา)") · เปิด Builder ใหม่
- Delete: เปิด Confirm dialog · ห้ามลบถ้ามี tasksUsing > 0
04Create Workflow · หน้าสร้างใหม่
Modal 2 sections · Basic Info + Starting Template
🖼️ Layout ของ Modal
- Header: "สร้าง Workflow ใหม่" + subtitle
- Section 1 · ข้อมูลพื้นฐาน: Name TH · Name EN · Description TH · Description EN · Version
- Section 2 · เลือก Base Template: radio 2 ตัวเลือก · Blank vs QC Standard
- Footer: ปุ่ม "ยกเลิก" (secondary) + "สร้าง" (primary)
📝 Fields ในฟอร์ม
| Field | Required | Note |
|---|---|---|
| Name (TH) | ✅ Required | ชื่อไทย · placeholder "เช่น ตรวจคุณภาพงานเทคอนกรีต" |
| Name (EN) | ✅ Required | English name · placeholder "e.g. Concrete Pouring Inspection" |
| Description (TH) | Optional | คำอธิบายไทย · textarea 2 บรรทัด |
| Description (EN) | Optional | English description · textarea 2 lines |
| Version | ✅ Required | Default "v1.0" · อนุญาต v0.1, v2.5 etc. |
| Starting Template | ✅ Required | Radio · Blank (3 steps default) หรือ QC Standard (7 steps) |
📋 2 Base Templates ในหน้า Create
Blank Template
- Steps: 3 (Created, In Progress, Done)
- Transitions: 2 (auto → auto)
- ปรับแต่งได้ทั้งหมดใน Builder
QC Standard Template
- Steps: 7 (created→assigned→in_progress→review→done, +blocked, +rejected)
- Transitions: 8 (รวม rework loop จาก review→rejected→assigned)
- เหมาะกับงาน QC ทั่วไป
⚡ ขั้นตอนการสร้าง
- กดปุ่ม "สร้าง Workflow ใหม่" ในหน้า List → เปิด Modal
- กรอก Name TH + Name EN (required)
- (Optional) กรอก Description TH + Description EN
- ตั้ง Version (default "v1.0")
- เลือก Base Template (Blank หรือ QC Standard)
- กดปุ่ม "สร้าง"
- ระบบสร้าง Workflow (status: Draft) · toast "สร้าง Workflow เรียบร้อย เปิด Builder ให้แก้ไขต่อ"
- ระบบเปิด Builder view อัตโนมัติ (route
/inspection/workflow/:id/edit)
05Workflow Builder · หน้าแก้ไข
Full-screen editor · Steps + Transitions + Diagram · Save/Publish/Delete/Duplicate
🖼️ Layout ของ Builder
- Header row (top): Back icon (circular) + Title "Workflow: {name}" + Status pill + Action buttons (Save · Publish · Duplicate · Delete · Export)
- Section 1 · Meta: ข้อมูล Workflow (name TH/EN · desc · version) แก้ inline
- Section 2 · Steps & Assignees: ตาราง steps · reorder (up/down) · add/delete · edit inline
- Section 3 · Transitions: ตาราง transitions · add/delete · dropdown from/to states + trigger
- Section 4 · Diagram: Auto-drawn diagram แสดง flow ทั้งหมด · state colors match palette
📋 Section 2 · Steps & Assignees
ตารางแสดงและแก้ Steps ของ Workflow · แต่ละแถวคือ 1 step
| Column | Type | รายละเอียด |
|---|---|---|
| # | Order | ลำดับ · ปุ่ม ↑↓ เพื่อ reorder |
| State | Dropdown | 7 states (created, assigned, in_progress, review, done, blocked, rejected) |
| Role (ผู้รับผิดชอบ) | Dropdown | QCM · QC Inspector · PM · Site Engineer · Foreman · Admin · — |
| SLA (hours) | Number | ชั่วโมงที่ควรใช้ · เช่น 24 (1 วัน) · 0 = ไม่มี SLA |
| Note (TH) | Text | คำอธิบาย step ในภาษาไทย · เช่น "เข้าตรวจสอบหน้างาน" |
| Note (EN) | Text | Step description in English |
| Delete | Icon | ลบ step · อนุญาตเมื่อมี > 1 step |
ปุ่ม "+ เพิ่มขั้นตอน": เพิ่ม step ใหม่ท้ายรายการ · default state=in_progress, role=QC Inspector, sla=24
🔀 Section 3 · Transitions (State Transitions)
ตารางแสดงเส้นทางเปลี่ยน State · แต่ละแถวคือ 1 transition
| Column | Type | รายละเอียด |
|---|---|---|
| # | Order | ลำดับแสดงผล |
| From (state) | Dropdown | State ต้นทาง · เลือกจาก states ที่มีใน workflow นี้ |
| To (state) | Dropdown | State ปลายทาง |
| Trigger | Dropdown | เงื่อนไข: auto pass fail block unblock cancel |
| Label (TH) | Text | ข้อความปุ่มใน Task detail · เช่น "อนุมัติ → ปิดงาน" |
| Label (EN) | Text | Button label in English · e.g. "Approve → Done" |
| Delete | Icon | ลบ transition |
ปุ่ม "+ เพิ่มเส้นทาง": default from=in_progress, to=review, trigger=pass
📊 Section 4 · Diagram
แผนภาพอัตโนมัติ · แสดง State nodes สีตาม palette · เส้น transitions พร้อม trigger label · ให้ผู้ใช้เห็นภาพรวม lifecycle
⚡ Action buttons (top-right)
| Button | Action | Note |
|---|---|---|
| Save (bookmark) | บันทึกฉบับร่าง (status: draft) | Toast "บันทึกเรียบร้อย" |
| Publish (send) | เปลี่ยน status: draft → published | Task ใหม่ๆ จะเลือก Workflow นี้ได้ |
| Duplicate (copy) | ทำสำเนา · เปิดตัวใหม่ใน Builder | ชื่อใหม่ "...(สำเนา)" |
| Delete (trash) | เปิด Confirm dialog | Disabled ถ้า tasksUsing > 0 |
| Export Excel (download) | ส่งออกเป็น .xlsx | 3 sheets: Meta · Steps · Transitions |
| Back (circular ←) | กลับหน้า List | ถ้ามี unsaved changes → warning |
067 Lifecycle States
7 states มาตรฐาน · แต่ละ state มีสี · terminal flag · main flag
| State | ID | Main | Terminal | ความหมาย |
|---|---|---|---|---|
| Created | created | ✅ | ❌ | Task เพิ่งถูกสร้าง · รอกำหนดผู้รับผิดชอบ |
| Assigned | assigned | ✅ | ❌ | มอบหมายผู้รับผิดชอบและรอเริ่มงาน |
| In Progress | in_progress | ✅ | ❌ | ผู้รับผิดชอบกำลังตรวจสอบหรือแก้ไข |
| Review | review | ✅ | ❌ | ส่งให้ผู้ตรวจสอบพิจารณาผล |
| Done | done | ✅ | ✅ | ปิด · ไม่เปลี่ยนแปลงอีก · terminal state |
| Blocked | blocked | ❌ | ❌ | ระงับ · ต้องปลดล็อกก่อนดำเนินการต่อ |
| Rejected | rejected | ❌ | ❌ | ไม่ผ่านการตรวจสอบ · ส่งกลับให้แก้ |
terminal:true จะปิดถาวร · เปลี่ยนไปไม่ได้ (เฉพาะ Done ในระบบ default)07Transitions + 6 Triggers
การเปลี่ยน State · trigger types + สี + ความหมาย
| Trigger | ความหมาย | ตัวอย่างการใช้ |
|---|---|---|
| auto | เปลี่ยน state อัตโนมัติ · ไม่ต้องกดปุ่ม | Assigned → In Progress เมื่อ Inspector เปิด Task |
| pass | ผ่านการตรวจสอบ · Success path | In Progress → Review เมื่อ Inspector Submit |
| fail | ไม่ผ่าน · Failure path · เข้า rework loop | Review → Rejected เมื่อ Approver ตีกลับ |
| block | ติดปัญหา · pause งาน | In Progress → Blocked เมื่อรอวัสดุ |
| unblock | ปลดล็อก · กลับไป In Progress | Blocked → In Progress เมื่อวัสดุพร้อม |
| cancel | ยกเลิก · terminal | ปกติไม่ใช้ · ใช้ในกรณีพิเศษ |
🔄 ตัวอย่าง Transitions ใน QC Standard Template (8 transitions)
| # | From | To | Trigger | Label (TH) |
|---|---|---|---|---|
| 1 | Created | Assigned | auto | เริ่มงาน |
| 2 | Assigned | In Progress | auto | รับงาน |
| 3 | In Progress | Review | pass | ส่งผลตรวจ |
| 4 | Review | Done | pass | อนุมัติ → ปิดงาน |
| 5 | Review | Rejected | fail | ไม่ผ่าน |
| 6 | Rejected | Assigned | auto | ส่งกลับ Assigned |
| 7 | In Progress | Blocked | block | ติดปัญหา |
| 8 | Blocked | In Progress | unblock | ปลดบล็อก |
08Roles + SLA
6 role options สำหรับกำหนดผู้รับผิดชอบต่อ step
| Role | ID | ความรับผิดชอบทั่วไป |
|---|---|---|
| QCM | QCM | สร้าง Task · มอบหมาย · ตรวจสอบผล · Publish workflow |
| QC Inspector | QC Inspector | ลงพื้นที่ตรวจสอบ · กรอก Checklist · ออก NCR |
| PM | PM | Approve · ลงนามรับรอง · ระงับงาน · มอบหมายผู้แก้ |
| Site Engineer | Site Engineer | ตรวจสอบทางเทคนิค · ช่วย Inspector ในงานเฉพาะทาง |
| Foreman | Foreman | ควบคุมช่างในไซต์ · แก้ไข NCR |
| Admin | Admin | ระบบ · ยกเลิกงาน · Force close |
| — | — (empty) | ไม่มีผู้รับผิดชอบ (เช่น Done state) |
⏱️ SLA (Service Level Agreement)
SLA เป็นจำนวนชั่วโมงที่ควรใช้ต่อ step · ใช้ในการแจ้งเตือน / dashboard escalation
- SLA = 24 → 1 วันทำการ · ทั่วไป
- SLA = 8 → ครึ่งวัน · งานเร่งด่วน
- SLA = 0 → ไม่มี SLA · เช่น terminal state Done
- SLA เกินกำหนด → แสดง escalation flag ใน Task List
093 Standard Templates
Templates พร้อมใช้ใน Template Picker · ปรับแต่งต่อใน Builder
QC Standard (7 steps)
- 7 Steps · 8 Transitions
- รวม Blocked + Rejected states
- เหมาะกับงาน QC ทั่วไป
- Roles: QCM · QC Inspector · PM
Simple Inspection (3 steps)
- 3 Steps · 2 Transitions
- สำหรับงานเล็ก / เร่งด่วน
- ไม่มี Review · Block · Reject
- Roles: QCM · QC Inspector
Double-verify + PM sign-off
- 6 Steps · 6 Transitions
- QC #1 ตรวจ + QC #2 cross-check + PM sign
- Rework loop กลับ In Progress
- Roles: QCM · QC Inspector (×2) · PM
📋 QC Standard Template · รายละเอียด 7 Steps
| # | State | Role | SLA | Note (TH) |
|---|---|---|---|---|
| 1 | Created | QCM | 4 hr | สร้าง Task และผูก Checklist |
| 2 | Assigned | QCM | 8 hr | กำหนดผู้ตรวจสอบ |
| 3 | In Progress | QC Inspector | 24 hr | เข้าตรวจสอบหน้างาน |
| 4 | Review | QCM | 12 hr | พิจารณาผลการตรวจ |
| 5 | Done | — | — | ปิดงาน |
| 6 | Rejected | PM | 8 hr | ส่งกลับและมอบหมายผู้แก้ไข |
| 7 | Blocked | PM | 8 hr | ระงับเมื่อพบปัญหา |
10Template Picker Modal
Modal 2-column · เลือก Template + ดู preview · 3 tabs (Steps / Transitions / Diagram)
🖼️ Layout
- Header: "เลือกเทมเพลต Workflow" + subtitle "เลือกแม่แบบที่จะเริ่มต้น"
- Left column (aside): รายการ 3 Templates เป็น cards · เลือก 1 · แสดง check ✓
- Right column (main): รายละเอียด Template ที่เลือก · title + description + 3 tabs
- Footer: "ยกเลิก" + "นำออก Excel เปล่า" + "นำออก Excel พร้อมข้อมูล" + "ใช้ Template นี้"
📊 3 Tabs ในหน้ารายละเอียด
- Tab 01 · Steps: ตาราง Steps ทั้งหมด · #, State (pill), Role, SLA, Note
- Tab 02 · Transitions: ตาราง Transitions · #, From→To, Trigger (colored pill), Label
- Tab 03 · Diagram: แผนภาพ auto-drawn · State nodes สี · เส้นเชื่อม trigger
⚡ Actions
| Button | Action |
|---|---|
| ใช้ Template นี้ | สร้าง Workflow ใหม่ตาม Template · เปิด Builder Popup ให้แก้ไข (โหมด preview badge) |
| นำออก Excel เปล่า | Export template schema (Meta + empty Steps/Transitions) เพื่อใช้เป็นแบบฟอร์ม |
| นำออก Excel พร้อมข้อมูล | Export template + sample data พร้อม |
| ยกเลิก | ปิด Modal · กลับหน้า List |
11Import / Export Excel
รูปแบบไฟล์ · 3 sheets · Preview ก่อน import
📄 รูปแบบไฟล์ Excel (3 sheets)
Sheet 1 · Meta
| Name (TH) | Name (EN) | Description (TH) | Description (EN) | Version |
|---|---|---|---|---|
| ตรวจงานสี | Paint Inspection | ตรวจคุณภาพงานสี | Paint QC | v1.0 |
Sheet 2 · Steps
| # | State | Role | SLA Hours | Note (TH) | Note (EN) |
|---|---|---|---|---|---|
| 1 | created | QCM | 4 | สร้าง Task | Create task |
| 2 | assigned | QCM | 8 | มอบหมาย | Assign |
| 3 | in_progress | QC Inspector | 24 | ตรวจ | Inspect |
Sheet 3 · Transitions
| # | From | To | Trigger | Label (TH) | Label (EN) |
|---|---|---|---|---|---|
| 1 | created | assigned | auto | เริ่มงาน | Start |
| 2 | assigned | in_progress | auto | รับงาน | Receive |
| 3 | in_progress | done | pass | ผ่าน | Pass |
📥 Import flow
- กดปุ่ม "นำเข้า Excel" ในหน้า List → เปิด file picker
- เลือกไฟล์ .xlsx · ระบบ parse Meta + Steps + Transitions
- เปิด Import Preview Modal · แสดงข้อมูลที่จะสร้าง · จำนวน steps + transitions
- ตรวจสอบ · กด "ยืนยันนำเข้า" → สร้าง Workflow (status: Draft) → เปิด Builder
- Toast "นำเข้า Workflow เรียบร้อย"
📤 Export flow
- Export จาก Builder: ปุ่ม Export ใน Action bar · Download .xlsx ของ Workflow ปัจจุบัน
- Export จาก Template Picker: Export empty (schema เปล่า) หรือ Export with data (มีตัวอย่าง)
- Filename:
workflow-{id}.xlsx
12Workflow Status
3 statuses ของ Workflow เอง (แยกจาก Task states)
| Status | ID | ความหมาย | Task ใช้ได้ไหม |
|---|---|---|---|
| Draft · ฉบับร่าง | draft |
ยังไม่เผยแพร่ · แก้ไขได้ทั้งหมด | ❌ ยังผูก Task ไม่ได้ |
| Published · เผยแพร่แล้ว | published |
พร้อมใช้ · Task ใหม่เลือก workflow นี้ได้ | ✅ ผูก Task ได้ |
| Archived · เก็บถาวร | archived |
เลิกใช้แล้ว · Task ใหม่เลือกไม่ได้ · Task เดิมยังใช้ต่อ | ⚠️ เฉพาะ Task เดิม |
Draft → Published: กดปุ่ม Publish ใน Builder
Published → Archived: Admin Archive · Task ใหม่จะเลือกไม่ได้แล้ว
Archived → Published: Re-publish (ถ้าต้องกลับมาใช้)
Draft → Deleted: Delete + Confirm dialog (ถ้าไม่มี Task ผูก)
13Business Rules
กฎที่ต้อง enforce ใน backend + UI
- Steps ≥ 1: ทุก Workflow ต้องมีอย่างน้อย 1 step · ห้ามลบ step สุดท้าย
- Terminal state ต้องมี: Workflow ต้องมีอย่างน้อย 1 terminal state (default: done)
- Transitions valid: from + to ต้องเป็น state ที่มีใน steps ของ Workflow นี้
- ห้ามลบเมื่อ tasksUsing > 0: ใช้ Archive แทน · Task เดิมยังใช้ workflow เดิมต่อไป
- Publish requires validation: ก่อน Publish ต้องผ่านการตรวจสอบ:
- Name TH + EN ครบ
- Steps ≥ 1
- Terminal state มี
- Transitions valid
- Version bump: การแก้ Workflow ที่ Published + tasksUsing > 0 ควร bump version (v1.0 → v1.1) · เพื่อเก็บ history
- Draft is private: Task ใหม่เลือก Draft workflow ไม่ได้ · เห็นเฉพาะ Published
- Auto trigger execution: เมื่อ Task เข้า state ที่มี transition trigger=auto · ระบบจะ execute ทันที (async job)
- SLA breach → alert: Task ที่ค้าง state > SLA hours จะ escalate ไป PM/QCM · แสดง flag ใน Task List
- Blocked state พิเศษ: Task ที่ Blocked ต้อง Unblock ก่อนถึงจะเดินต่อได้ · block/unblock ต้องมี reason
14Appendix · Screen References + Data Model
🖼️ Screens (ใน source v2.0)
| Screen | URL | Function |
|---|---|---|
| Workflow List | /inspection/workflow | รายการ workflow ทั้งหมด |
| Create Modal | same page (modal) | Basic info + Base template |
| Workflow Builder | /inspection/workflow/:id/edit | Full editor · Steps + Transitions + Diagram |
| Template Picker Modal | same page (modal) | 2-column · เลือก template + preview 3 tabs |
| Builder Popup (from Template Picker) | Preview mode overlay | แก้ template ก่อน commit |
| Import Preview Modal | same page (modal) | ตรวจทานก่อน import |
| Delete Confirm Dialog | same page (dialog) | ยืนยันการลบ |
🗄️ Data Model (simplified)
Workflow {
id: string // e.g. "wf-tpl-qc-standard"
nameTh: string
nameEn: string
descTh: string
descEn: string
version: string // e.g. "v1.0"
status: enum // "draft" | "published" | "archived"
steps: Step[] // length ≥ 1
transitions: Transition[]
tasksUsing: number // count of tasks bound
updatedAt: date
updatedBy: string
}
Step {
id: string // "s-1", "s-2", ...
state: enum // 7 states (created, assigned, in_progress, review, done, blocked, rejected)
role: enum // 6 roles + "—"
slaHours: number // hours · 0 = no SLA
noteTh: string
noteEn: string
}
Transition {
id: string // "t-1", "t-2", ...
from: state // state id
to: state // state id
trigger: enum // "auto" | "pass" | "fail" | "block" | "unblock" | "cancel"
labelTh?: string // button label displayed to user
labelEn?: string
}
State (system-defined, 7 items) {
id: string
color: hex // border/dot color
bg: hex // background
fg: hex // text color
terminal: boolean // true = ปิดถาวร (Done)
main: boolean // true = happy path
}
📌 Version History
- Workflow Lifecycle v2.0 · 2026-04 · Circular back icon + flex layout (source)
- เอกสารนี้ v1.0 · 7 ก.ค. 2569 · Initial release